<?php
App::uses('AppModel', 'Model');
/**
 * User Model
 *
 */
class User extends AppModel {
	public $name = 'User';
	
	public $hasMany = array(
        'Reservation' => array(
			'className'  => 'Reservation',
			'order'      => 'Reservation.start_time DESC'
		)
	);
		
	public $validate = array(
		'name'=>array(
			'Brak imienia'=>array(
				'rule'=>'notEmpty',
				'message'=>'Brak imienia.'
			),
			'Nielegalny znak'=>array(
				'rule'=>'alphaRegexp',
				'message'=>'Nielegalny znak.'
			)
		),
		'surname'=>array(
			'Brak nazwiska'=>array(
				'rule'=>'notEmpty',
				'message'=>'Brak nazwiska.'
			),
			'Nielegalny znak'=>array(
				'rule'=>'alphaRegexp',
				'message'=>'Nielegalny znak.'
			)
		),
		'address'=>array(
			'Brak adresu'=>array(
				'rule'=>'notEmpty',
				'message'=>'Brak adresu.'
			),
		),
		'postal_code'=>array(
			'Brak kodu pocztowego'=>array(
				'rule'=>'notEmpty',
				'message'=>'Brak kodu pocztowego.'
			),
			'Niepoprawny kod pocztowy'=>array(
				'rule'=>'/^(\d{2})-(\d{3})$/',
				'message'=>'Niepoprawny kod pocztowy (format: 00-000).'
			)
		),
		'city'=>array(
			'Brak miasta'=>array(
				'rule'=>'notEmpty',
				'message'=>'Brak miasta.'
			),
		),
		'email'=>array(
			'Brak emaila'=>array(
				'rule'=>'notEmpty',
				'message'=>'Brak emaila.'
			),
			'Niepoprawnyły email.'=>array(
				'rule'=>'email',
				'message'=>'Niepoprawny email.'
			),
			'Zajęty email'=>array(
				'rule'=>'isUnique',
				'message'=>'Email zajęty.'
			)
		),
		'phone' => array(
			'Niepoprawny telefon' => array(
				'rule' => 'phoneRegexp',
				'message'=>'Niepoprawny numer telefon.'
			)
		),
		'username'=>array(
			'Spacja w nicku'=>array(
				'rule'=>'NonPolishRegexp',
				'message'=>'Spacja w nicku.'
			),			
			'Za krótki nick'=>array(
				'rule'=>array('minLength', 5),
				'message'=>'Za krótki nick, minimum 5 znaków.'
			),
			'Zajęty nick'=>array(
				'rule'=>'isUnique',
				'message'=>'Nick zajęty.'
			)
		),
		'password'=>array(
			'Brak hasła'=>array(
				'rule'=>'notEmpty',
				'message'=>'Brak hasła.'
			),
			'Spacja w haśle'=>array(
				'rule'=>'alphaNumeric',
				'message'=>'Spacja w haśle.'
			),	
			'Niepasujące hasło'=>array(
				'rule'=>'matchPasswords',
				'message'=>'Hasła nie pasują.'
			),
			'Za krótkie hasło'=>array(
				'rule'=>array('minLength', 5),
				'message'=>'Za krótkie hasło, minimum 5 znaków.'
			),
		),
		'cpassword'=>array(
			'Brak hasła'=>array(
				'rule'=>'notEmpty',
				'message'=>'Brak potwierdzenia hasła.'
			)
		),
		'newpassword'=>array(
			'Brak hasła'=>array(
				'rule'=>'notEmpty',
				'message'=>'Brak hasła.'
			),
			'Spacja w haśle'=>array(
				'rule'=>'alphaNumeric',
				'message'=>'Spacja w haśle.'
			),	
			'Niepasujące hasło'=>array(
				'rule'=>'matchNewPasswords',
				'message'=>'Hasła nie pasują.'
			),
			'Za krótkie hasło'=>array(
				'rule'=>array('minLength', 5),
				'message'=>'Za krótkie hasło, minimum 5 znaków.'
			),
		),
		'cnewpassword'=>array(
			'Brak hasła'=>array(
				'rule'=>'notEmpty',
				'message'=>'Brak potwierdzenia hasła.'
			)
		),
		'oldpassword'=>array(
			'Nie poprawne hasło'=>array(
				'rule'=>'matchOldPasswords',
				'message'=>'Złe aktualne hasło.'
			)
		)
	);
		
	public function phoneRegexp($data) {
		foreach($data as $key => $value) {
			if(preg_match('/^((\+48|\(+48\))\s?)?(\d{9}|(\d{3}-\d{3}-\d{3})|(\d{3}\s\d{3}\s\d{3}))$/', $value) || 
				preg_match('/^((\d{2}[\s-]?|\(d{2}\)\s?))?(\d{7}|(\d{3}-\d{2}-\d{2})|(\d{3}\s\d{2}\s\d{2}))$/', $value)) {
				return true;
			}
			return false;
		}	
	}
	
	public function afterValidate() {
		foreach($this->data['User'] as $key => $value) {
      		$this->data['User'][$key] = trim(implode(' ', preg_split('/\s+/', $value)));
		}
	}
	
	public function alphaRegexp($data) {
		foreach($data as $key => $value) {
			return preg_match('/^[a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ]*$/', $value);
		}		
	}
	
	public function NonPolishRegexp($data) {
		foreach($data as $key => $value) {
			return preg_match('/^[a-zA-Z0-9]*$/', $value);
		}		
	}
	
	
	public function matchPasswords($data) {
		if($data['password'] == $this->data['User']['cpassword']) {
			return true;
		}
		$this->invalidate('cpassword', 'Hasła nie pasują');
		return false;
	}
	
	public function matchNewPasswords($data) {
		if($data['newpassword'] == $this->data['User']['cnewpassword']) {
			return true;
		}
		$this->invalidate('cnewpassword', 'Hasła nie pasują');
		return false;
	}
	

	public function matchOldPasswords($data) {
		$user = AuthComponent::user();
		$user = $this->find('first', array('conditions'=>array('username'=>$user['username'])));
		 
		if(AuthComponent::password($data['oldpassword']) == $user['User']['password']) {
			return true;
		}
		return false;
	}
	
	public function beforeSave() {
		if(isset($this->data['User']['password'])) {
			$this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);
		}
		if(isset($this->data['User']['newpassword'])) {
			$this->data['User']['password'] = AuthComponent::password($this->data['User']['newpassword']);
		}
		return true;
	}
}
?>
